﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FileManagerSystem.Manager
{
    /// <summary>
    /// 抽象文档系统 用于处理目录树结构，当有文件或文件夹发生变化时，外部实时更新虚拟目录
    /// </summary>
    public class AbstractDocument
    {
        private static readonly AbstractDocument _instance = new AbstractDocument();
        private Dictionary<int, List<AbstractDirectory>> userDocuments { get; } //key中的int表示用户id，value中表示该用户所拥有的的文档系统集合，按照目录层次自动分析
        private AbstractDocument()
        {
            userDocuments = new Dictionary<int, List<AbstractDirectory>>();
            InitDocuments();
        }

        private void InitDocuments()
        {
            //TODO：加载所有文件信息，根据文件归属建立虚拟文档系统，需要扫描每一个文件的虚拟路径信息
        }

        public static AbstractDocument GetInstance()
        {
            return _instance;
        }

    }

    /// <summary>
    /// 抽象文件夹
    /// </summary>
    public class AbstractDirectory
    {
        /// <summary>
        /// 文件夹名称
        /// </summary>
        public string DirName { get; set; }

        /// <summary>
        /// 抽象文件夹下 抽象文件夹列表
        /// </summary>
        public List<AbstractDirectory> SubDirectories { get; set; }

        /// <summary>
        /// 抽象文件夹下 抽象文件列表
        /// </summary>
        public List<AbstractFile> Files { get; set; }
    }

    /// <summary>
    /// 抽象文件
    /// </summary>
    public class AbstractFile
    {
        /// <summary>
        /// 所在抽象文件夹（完整路径）
        /// </summary>
        public string SortDir { get; set; }

        /// <summary>
        /// 所在真实文件夹 磁盘真实相对目录（完整路径）
        /// </summary>
        public string RealDir { get; set; }

        /// <summary>
        /// 抽象文件名（包含后缀）
        /// </summary>
        public string FileName { get; set; }

        /// <summary>
        /// 真实文件名（包含后缀）
        /// </summary>
        public string RealFileName { get; set; }
    }
}
